home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / SciAn / src / ScianJerryFiles.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  3KB  |  160 lines

  1. /*ScianJerryFiles.c
  2.   Jerry Clarke
  3. */
  4.  
  5. #include "Scian.h"
  6.  
  7. #ifdef JERRYFILES
  8.  
  9. #include "ScianTypes.h"
  10. #include "ScianArrays.h"
  11. #include "ScianIcons.h"
  12. #include "ScianWindows.h"
  13. #include "ScianObjWindows.h"
  14. #include "ScianVisWindows.h"
  15. #include "ScianVisObjects.h"
  16. #include "ScianControls.h"
  17. #include "ScianColors.h"
  18. #include "ScianDialogs.h"
  19. #include "ScianFiles.h"
  20. #include "ScianFileSystem.h"
  21. #include "ScianLists.h"
  22. #include "ScianPictures.h"
  23. #include "ScianErrors.h"
  24. #include "ScianTimers.h"
  25. #include "ScianDatasets.h"
  26. #include "ScianFilters.h"
  27. #include "ScianTextBoxes.h"
  28. #include "ScianTitleBoxes.h"
  29. #include "ScianButtons.h"
  30. #include "ScianSliders.h"
  31. #include "ScianScripts.h"
  32. #include "ScianIDs.h"
  33. #include "ScianStyle.h"
  34. #include "ScianMethods.h"
  35. #include "ScianObjFunctions.h"
  36. #include "ScianHwuFiles.h"
  37. #include "ScianSciences.h"
  38. #include "ScianVisObjects.h"
  39. #include "ScianVisSticks.h"
  40.  
  41. /*Stop mkmk reading this file*/
  42. /*-mkmk
  43. */
  44.  
  45. #include "bop.h"
  46.  
  47. #define POLYS_PER_BITE        1000
  48.  
  49. ObjPtr ReadBopFile(name)
  50. char *name;
  51. {
  52. int    have_geom = 0 , have_scalars = 0;
  53. long    polys_left = 0, total_polys = 0;
  54. long    n_polys, poly_cntr = 0, vert_cntr = 0;
  55. long    i, j, n, index = 0;
  56. long    poly_vert_index[BOP_MAX_VERTS];
  57. float    xyz_bounds[6];
  58. FILE    *fp;
  59.  
  60. Bop_Ptr        *bp;
  61. Bop_Polygon    *orig_bpoly, *bpoly;
  62. Bop_Vert    *bvert;
  63.  
  64. /* Scian */
  65. ObjPtr        geometry, verticies, scalars;
  66. ObjPtr        dataform;
  67.  
  68. if((bp = bop_open(name)) == NULL){
  69.     Error("ReadBopFile", OPENFILEERROR, name);
  70.     return NULLOBJ;
  71.     }
  72.  
  73. if(bp->info.type & BOP_GEOM) have_geom = 1;
  74. if(bp->info.type & BOP_SCALAR) have_scalars = 1;
  75.  
  76. fprintf(stderr, "\nBOP File %s\n", name);
  77. fprintf(stderr, "%d Polygons %d Verticies\n",
  78.         bp->info.npoly, bp->info.nvert);
  79.  
  80. if((bp->info.npoly <= 0) || (bp->info.nvert <= 0)){
  81.     fprintf(stderr, "No Data in BOP File %s\n", name);
  82.     bop_close(bp);
  83.     return NULLOBJ;
  84.     }
  85.  
  86. xyz_bounds[0] = bp->info.xmin;
  87. xyz_bounds[1] = bp->info.xmax;
  88. xyz_bounds[2] = bp->info.ymin;
  89. xyz_bounds[3] = bp->info.ymax;
  90. xyz_bounds[4] = bp->info.zmin;
  91. xyz_bounds[5] = bp->info.zmax;
  92.  
  93. n = bp->info.nvert;
  94.  
  95. verticies = NewDataset("Verticies", 1, &n, 3);
  96.  
  97. dataform = NewUnstructuredDataForm("BopDataForm",
  98.                 0,
  99.                 &n,
  100.                 xyz_bounds,
  101.                 verticies);
  102.  
  103. geometry = NewGeometryDataset("Bop");
  104. scalars = NewDataset("Scalars", 1, &n, 0);
  105.  
  106. SetDatasetForm(geometry, dataform);
  107. SetDatasetForm(scalars, dataform);
  108.  
  109. SetCurField(FORMFIELD, verticies);
  110. SetCurField(FIELD1, scalars);
  111. polys_left = bp->info.npoly;
  112. while(polys_left > 0){
  113.     n_polys = MIN(polys_left, POLYS_PER_BITE);
  114.     orig_bpoly = bpoly = bop_read(bp, n_polys);
  115.     for(i=0 ; i < n_polys ; i++){
  116.         for(j=0 ; j < bpoly->nvert; j++){
  117.             bvert = &bpoly->vert[j];
  118.     
  119.             PutFieldComponent(FORMFIELD, 0, &index, bvert->x);
  120.             PutFieldComponent(FORMFIELD, 1, &index, bvert->y);
  121.             PutFieldComponent(FORMFIELD, 2, &index, bvert->z);
  122.     
  123.             PutFieldComponent(FIELD1, 0, &index, bvert->data);
  124.     
  125.     
  126.             poly_vert_index[j] = index;
  127.             index++;
  128.         }
  129.         AppendPolygonToDataset(geometry,
  130.             bpoly->nvert,
  131.             poly_vert_index);
  132.         bpoly = BOP_NEXT_POLY(&bp->info, bpoly);
  133.     }
  134.     cfree(orig_bpoly);
  135.     fprintf(stderr, "%d Polygons Defined %3.2f%% done\r",
  136.             total_polys,
  137.             100.0 * total_polys / bp->info.npoly);
  138.     total_polys += n_polys;
  139.     polys_left -= n_polys;
  140. }
  141. bop_close(bp);
  142. fprintf(stderr, "%d Polygons Defined 100.00%% done\n", total_polys);
  143.  
  144. RegisterNewDataset(geometry);
  145. RegisterNewDataset(scalars);
  146. return NULLOBJ;
  147. }
  148.  
  149. void InitJerryFiles()
  150. {
  151. DefineFormat("BOP", "bop", ReadBopFile, 0);
  152. }
  153.  
  154. void KillJerryFiles()
  155. {
  156. }
  157.  
  158. #endif
  159.  
  160.